package electronet.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import electronet.excepcion.DAOExcepcion;
import electronet.util.ConexionBD;
import electronet.modelo.Categoria;

public class categoriaDAO extends BaseDAO{


public Collection<Categoria> listar() throws DAOExcepcion {
		Collection<Categoria> c = new ArrayList<Categoria>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select IdCategoria,Nombre,Descripcion, IdPadre from Categoria where IdCategoria<>0 order by Nombre";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Categoria vo = new Categoria();
				vo.setIdCategoria(rs.getInt("IdCategoria"));
				vo.setNombre(rs.getString("Nombre"));
				vo.setDescripcion(rs.getString("Descripcion"));
				vo.setIdPadre(rs.getInt("IdPadre"));
				c.add(vo);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		
		
		return c;
	}	

public Categoria insertar(Categoria vo) throws DAOExcepcion {
		String query = "insert into categoria(Nombre, Descripcion,IdPadre) values (?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getNombre());
			stmt.setString(2, vo.getDescripcion());
			stmt.setInt(3, vo.getIdPadre());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			// Obtener el ultimo id
			int id = 0;
			query = "select last_insert_id()";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				id = rs.getInt(1);
			}
			vo.setIdCategoria(id);

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

public Categoria insertarSubCategoria(Categoria vo) throws DAOExcepcion {
	String query = "insert into Categoria(Nombre, Descripcion, idPadre) values (?,?,?)";
	Connection con = null;
	PreparedStatement stmt = null;
	ResultSet rs = null;
	try {
		con = ConexionBD.obtenerConexion();
		stmt = con.prepareStatement(query);
		stmt.setString(1, vo.getNombre());
		stmt.setString(2, vo.getDescripcion());
		int i = stmt.executeUpdate();
		if (i != 1) {
			throw new SQLException("No se pudo insertar");
		}
		// Obtener el ultimo id
		int id = 0;
		query = "select last_insert_id()";
		stmt = con.prepareStatement(query);
		rs = stmt.executeQuery();
		if (rs.next()) {
			id = rs.getInt(1);
		}
		vo.setIdCategoria(id);

	} catch (SQLException e) {
		System.err.println(e.getMessage());
		throw new DAOExcepcion(e.getMessage());
	} finally {
		this.cerrarResultSet(rs);
		this.cerrarStatement(stmt);
		this.cerrarConexion(con);
	}
	return vo;
}
}
